home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume16 / olvwm-3.0 / patch1 next >
Encoding:
Text File  |  1992-02-22  |  35.0 KB  |  1,307 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!think.com!mips!msi!dcmartin
  3. From: sdo@soliado.East.Sun.COM (Scott Oaks - Sun Consulting NYC)
  4. Subject: v16i091: olvwm 3.0, Patch1, Part01/01
  5. Message-ID: <1992Feb22.182731.4455@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. References: <csx-16i091-olvwm-3.0@uunet.UU.NET>
  10. Date: Sat, 22 Feb 1992 18:27:31 GMT
  11. Approved: dcmartin@msi.com
  12.  
  13. Submitted-by: sdo@soliado.East.Sun.COM (Scott Oaks - Sun Consulting NYC)
  14. Posting-number: Volume 16, Issue 91
  15. Archive-name: olvwm-3.0/patch1
  16. Patch-To: olvwm-3.0: Volume 15, Issue 147
  17.  
  18.  
  19. Prereq: 0
  20. *** BUILD/patchlevel.h    Fri Jan  3 18:50:59 1992
  21. --- src/patchlevel.h    Mon Jan 27 19:35:11 1992
  22. ***************
  23. *** 1 ****
  24. ! #define PATCHLEVELv3 0    
  25. --- 1 ----
  26. ! #define PATCHLEVELv3 1    
  27. *** BUILD/CHANGES    Fri Jan  3 18:50:56 1992
  28. --- src/CHANGES    Mon Jan 27 19:35:08 1992
  29. ***************
  30. *** 1,3 ****
  31. --- 1,39 ----
  32. + Version 3.1 fixes:
  33. +     1) Windows/popups/icons should all stay on the same screen better
  34. +     2) New Resource (PointerWorkspace) to prevent setting the pointer on
  35. +     the root window and frames so that an alternate pointer can be
  36. +     set (functions like PaintWorkspace)
  37. +     3) New Resource (SaveWorkspaceCmd) to specify an alternate to owplaces
  38. +        when SAVE_WORKSPACE is selected
  39. +     4) If you pin the Root Menu automatically, you can no longer pin up
  40. +        a second copy.
  41. +     5) Moving selected non-sticky clients into the VDM now works
  42. +     6) The Warp action now effects all screens olvwm is managing
  43. +     7) The GoTo command on the second screen now works
  44. +     8) Help is now a valid key identifier in .olvwmrc
  45. +     9) Menus without defaults no longer display the circle around the first
  46. +        entry
  47. +    10) Goto calculation now works (as advertised) by columns instead of rows
  48. +    11) multi-depth icon pixmaps now work
  49. +    12) JumpUpLeft/JumpDownLeft keybinds fixed
  50. +    13) Debugging code for window types fixed
  51. +    14) New Makefile variable VERSION to determine if version.o is included
  52. +    15) No longer need math library to compile
  53.   olvwm 3.0 notes:
  54.   
  55.   INCOMPATIBILITIES WITH VERSION 2:
  56. *** BUILD/Debug.c    Fri Jan  3 18:50:56 1992
  57. --- src/Debug.c    Mon Jan 27 19:38:24 1992
  58. ***************
  59. *** 4,10 ****
  60. --- 4,16 ----
  61.    *      file for terms of the license.
  62.    */
  63.   
  64. + #ident  "@(#)Debug.c    1.2 olvwm version 1/27/92"
  65. + /*
  66. +  * Based on
  67.   #ident    "@(#)Debug.c    26.5    91/09/14 SMI"
  68. +  *
  69. +  */
  70.   
  71.   #include <errno.h>
  72.   #include <stdio.h>
  73. ***************
  74. *** 72,80 ****
  75. --- 78,88 ----
  76.       "IconPane",
  77.       "Colormap",
  78.       "Menu",
  79. +     "PinMenu",
  80.       "NoFocus",
  81.       "Root",
  82.       "Busy",
  83. +     "Virtual",
  84.   };
  85.   
  86.   DebugWindow(win)
  87. *** BUILD/Imakefile    Fri Jan  3 18:50:56 1992
  88. --- src/Imakefile    Mon Jan 27 19:35:08 1992
  89. ***************
  90. *** 10,17 ****
  91.   /**/# window operations), defind NeedOlwmManPage to YES
  92.   #define NeedOlwmManPage    NO
  93.   
  94. ! #undef DestDir
  95. ! #define DestDir /auto/openwin
  96.   
  97.   /**/# No more changes needed
  98.   
  99. --- 10,18 ----
  100.   /**/# window operations), defind NeedOlwmManPage to YES
  101.   #define NeedOlwmManPage    NO
  102.   
  103. ! /**/# If you don't want the compile date included in the executable, comment
  104. ! /**/# out this line
  105. ! VERSION = version.o
  106.   
  107.   /**/# No more changes needed
  108.   
  109. ***************
  110. *** 23,29 ****
  111.   
  112.   DEFINES =  -DOW_I18N_L3 -DSUNDAE -DSHAPE
  113.   INCLUDES = -I$(HEADER_DEST) -I$(TOP)
  114. ! SYS_LIBRARIES = -ll -lm
  115.   DEPLIBS = 
  116.   LOCAL_LIBRARIES = $(OLGXLIB) $(XLIB)
  117.   
  118. --- 24,30 ----
  119.   
  120.   DEFINES =  -DOW_I18N_L3 -DSUNDAE -DSHAPE
  121.   INCLUDES = -I$(HEADER_DEST) -I$(TOP)
  122. ! SYS_LIBRARIES = -ll
  123.   DEPLIBS = 
  124.   LOCAL_LIBRARIES = $(OLGXLIB) $(XLIB)
  125.   
  126. ***************
  127. *** 61,71 ****
  128.             events.o gettext.o group.o helpsend.o images.o kbdfuncs.o \ 
  129.             list.o mem.o menu.o moveresize.o ol_button.o olwm.o olvwmrc.o \
  130.         properties.o resources.o screen.o services.o slave.o slots.o \ 
  131. !           st.o states.o usermenu.o usleep.o version.o virtual.o win.o \
  132.         winbusy.o winbutton.o wincolor.o winframe.o wingframe.o \ 
  133.             winicon.o winipane.o winmenu.o winnofoc.o \ 
  134.             winpane.o winpinmenu.o winpush.o winresize.o \ 
  135. !           winroot.o 
  136.   
  137.   
  138.   ALLFILES = \
  139. --- 62,72 ----
  140.             events.o gettext.o group.o helpsend.o images.o kbdfuncs.o \ 
  141.             list.o mem.o menu.o moveresize.o ol_button.o olwm.o olvwmrc.o \
  142.         properties.o resources.o screen.o services.o slave.o slots.o \ 
  143. !           st.o states.o usermenu.o usleep.o virtual.o win.o \
  144.         winbusy.o winbutton.o wincolor.o winframe.o wingframe.o \ 
  145.             winicon.o winipane.o winmenu.o winnofoc.o \ 
  146.             winpane.o winpinmenu.o winpush.o winresize.o \ 
  147. !           winroot.o ${VERSION}
  148.   
  149.   
  150.   ALLFILES = \
  151. ***************
  152. *** 88,94 ****
  153.   olvwmrc.o: parse.c olvwmrc.c
  154.   
  155.   version.c:: ${SRCS} ${HEADERS}
  156. !     @echo -n "#ident \"@(#)olvwm version compiled " > version.c
  157.       @/bin/sh -c 'echo `date` \"' >> version.c
  158.   
  159.   clean::
  160. --- 89,95 ----
  161.   olvwmrc.o: parse.c olvwmrc.c
  162.   
  163.   version.c:: ${SRCS} ${HEADERS}
  164. !     @/bin/sh -c 'echo -n "#ident \"@(#)olvwm version compiled "' > version.c
  165.       @/bin/sh -c 'echo `date` \"' >> version.c
  166.   
  167.   clean::
  168. *** BUILD/Makefile.sunpro    Sat Jan  4 11:30:02 1992
  169. --- src/Makefile.sunpro    Mon Jan 27 19:35:08 1992
  170. ***************
  171. *** 26,31 ****
  172. --- 26,35 ----
  173.   # Set this to the debugging options you'd like
  174.   DEBUG = -O
  175.   
  176. + # If you don't want the version string in the executable, comment out this
  177. + # line
  178. + VERSION = version.o
  179.   #
  180.   # You shouldn't need to change anything below this line
  181.   
  182. ***************
  183. *** 51,63 ****
  184.   LDFLAGS = -L${OPENWINHOME}/lib
  185.   LIBS = ${LDFLAGS} -lolgx -lX11 -lXext -ll
  186.   
  187. ! OBJS = ${SRCS:.c=.o} version.o
  188.   
  189.   olvwm : ${OBJS}
  190.       cc -o olvwm ${OBJS} ${LIBS}
  191.   
  192.   version.c : ${SRCS} ${HEADERS}
  193. !     @echo -n "#ident \"@(#)olvwm version compiled " > version.c
  194.       @/bin/sh -c 'echo `date` \"' >> version.c
  195.   
  196.   parse.c : parse.l
  197. --- 55,67 ----
  198.   LDFLAGS = -L${OPENWINHOME}/lib
  199.   LIBS = ${LDFLAGS} -lolgx -lX11 -lXext -ll
  200.   
  201. ! OBJS = ${SRCS:.c=.o} ${VERSION}
  202.   
  203.   olvwm : ${OBJS}
  204.       cc -o olvwm ${OBJS} ${LIBS}
  205.   
  206.   version.c : ${SRCS} ${HEADERS}
  207. !     @/bin/sh -c 'echo -n "#ident \"@(#)olvwm version compiled "' > version.c
  208.       @/bin/sh -c 'echo `date` \"' >> version.c
  209.   
  210.   parse.c : parse.l
  211. *** BUILD/globals.h    Fri Jan  3 18:50:57 1992
  212. --- src/globals.h    Mon Jan 27 19:35:09 1992
  213. ***************
  214. *** 4,10 ****
  215.    *      file for terms of the license.
  216.    */
  217.   
  218. ! #ident    "@(#)globals.h    1.1 olvwm version 1/3/92"
  219.   
  220.   /*
  221.    * Based on
  222. --- 4,10 ----
  223.    *      file for terms of the license.
  224.    */
  225.   
  226. ! #ident    "@(#)globals.h    1.2 olvwm version 1/27/92"
  227.   
  228.   /*
  229.    * Based on
  230. ***************
  231. *** 160,165 ****
  232. --- 160,167 ----
  233.       char        *ResizePosition;
  234.       ImageType    UseImageMenu;
  235.       Bool        VirtualMoveGroups;
  236. +     Bool        PointerWorkspace;
  237. +     char        *SaveWorkspaceCmd;
  238.   } GlobalResourceVariables;
  239.   
  240.   extern GlobalResourceVariables    GRV;
  241. *** BUILD/menu.c    Fri Jan  3 18:50:58 1992
  242. --- src/menu.c    Mon Jan 27 19:35:09 1992
  243. ***************
  244. *** 4,10 ****
  245.    *      file for terms of the license.
  246.    */
  247.   
  248. ! #ident    "@(#)menu.c    1.1 olvwm version 1/3/92"
  249.   
  250.   /*
  251.    * Based on
  252. --- 4,10 ----
  253.    *      file for terms of the license.
  254.    */
  255.   
  256. ! #ident    "@(#)menu.c    1.2 olvwm version 1/27/92"
  257.   
  258.   /*
  259.    * Based on
  260. ***************
  261. *** 106,112 ****
  262.   
  263.   static void (*syncFunc) ();
  264.   static void *syncInfo;
  265. ! static MenuInfo *findMenuInfo();
  266.          void MenuInfoDestroy();
  267.   static ButtonInfo *buttonInfoCreate();
  268.   static void showMenu();
  269. --- 106,112 ----
  270.   
  271.   static void (*syncFunc) ();
  272.   static void *syncInfo;
  273. !        MenuInfo *FindMenuInfo();
  274.          void MenuInfoDestroy();
  275.   static ButtonInfo *buttonInfoCreate();
  276.   static void showMenu();
  277. ***************
  278. *** 392,398 ****
  279.           /* this button has a submenu */
  280.           menu = menu->buttons[btn]->action.submenu;
  281.           btn = menu->buttonDefault;
  282. !         menuInfo = findMenuInfo(winInfo, menu);
  283.       } else {
  284.           /* this is a leaf button */
  285.           break;
  286. --- 392,398 ----
  287.           /* this button has a submenu */
  288.           menu = menu->buttons[btn]->action.submenu;
  289.           btn = menu->buttonDefault;
  290. !         menuInfo = FindMenuInfo(winInfo, menu);
  291.       } else {
  292.           /* this is a leaf button */
  293.           break;
  294. ***************
  295. *** 405,411 ****
  296.   
  297.       /* if not the same menu then find its corresponding menuinfo */
  298.       if (menuInfo->menu != menu) {
  299. !     if ((menuInfo = findMenuInfo(winInfo, menu)) == NULL)
  300.           return;
  301.       }
  302.       if (BUTTON_INDEX_OK(menuInfo, btn))
  303. --- 405,411 ----
  304.   
  305.       /* if not the same menu then find its corresponding menuinfo */
  306.       if (menuInfo->menu != menu) {
  307. !     if ((menuInfo = FindMenuInfo(winInfo, menu)) == NULL)
  308.           return;
  309.       }
  310.       if (BUTTON_INDEX_OK(menuInfo, btn))
  311. ***************
  312. *** 719,725 ****
  313.       recalcCachedMenu(winInfo, menu);
  314.       }
  315.   
  316. !     menuInfo = findMenuInfo(winInfo, menu);
  317.   
  318.       if (menuInfo == NULL)
  319.       return;
  320. --- 719,725 ----
  321.       recalcCachedMenu(winInfo, menu);
  322.       }
  323.   
  324. !     menuInfo = FindMenuInfo(winInfo, menu);
  325.   
  326.       if (menuInfo == NULL)
  327.       return;
  328. ***************
  329. *** 1021,1030 ****
  330.   }
  331.   
  332.   /*
  333. !  * findMenuInfo
  334.    */
  335. ! static MenuInfo *
  336. ! findMenuInfo(winInfo, menu)
  337.       WinGeneric *winInfo;
  338.       Menu       *menu;
  339.   {
  340. --- 1021,1030 ----
  341.   }
  342.   
  343.   /*
  344. !  * FindMenuInfo
  345.    */
  346. ! MenuInfo *
  347. ! FindMenuInfo(winInfo, menu)
  348.       WinGeneric *winInfo;
  349.       Menu       *menu;
  350.   {
  351. ***************
  352. *** 3220,3226 ****
  353.       pb = menu->buttons[defitem];
  354.   
  355.       if (pb->enabled) {
  356. !     MenuInfo *menuInfo = findMenuInfo(win, menu);
  357.       assert(menuInfo);
  358.       (*pb->action.callback) (win->core.client->dpy, win, menuInfo, defitem);
  359.       }
  360. --- 3220,3226 ----
  361.       pb = menu->buttons[defitem];
  362.   
  363.       if (pb->enabled) {
  364. !     MenuInfo *menuInfo = FindMenuInfo(win, menu);
  365.       assert(menuInfo);
  366.       (*pb->action.callback) (win->core.client->dpy, win, menuInfo, defitem);
  367.       }
  368. *** BUILD/moveresize.c    Fri Jan  3 18:50:58 1992
  369. --- src/moveresize.c    Mon Jan 27 19:35:10 1992
  370. ***************
  371. *** 4,10 ****
  372.    *      file for terms of the license.
  373.    */
  374.   
  375. ! #ident "@(#)moveresize.c    1.1 olvwm version 1/3/92"
  376.   
  377.   /*
  378.    * Based on
  379. --- 4,10 ----
  380.    *      file for terms of the license.
  381.    */
  382.   
  383. ! #ident "@(#)moveresize.c    1.2 olvwm version 1/27/92"
  384.   
  385.   /*
  386.    * Based on
  387. ***************
  388. *** 305,311 ****
  389.           return NULL;
  390.       }
  391.       new = XCreateRegion();
  392. !     XUnionRectWithRegion(rect, new, new);
  393.       XSubtractRegion(mstuff->region, new, mstuff->region);
  394.       XDestroyRegion(new);
  395.       return NULL;
  396. --- 305,311 ----
  397.           return NULL;
  398.       }
  399.       new = XCreateRegion();
  400. !     XUnionRectWithRegion(&rect, new, new);
  401.       XSubtractRegion(mstuff->region, new, mstuff->region);
  402.       XDestroyRegion(new);
  403.       return NULL;
  404. ***************
  405. *** 426,432 ****
  406.           if (mstuff.dragwin) {
  407.           mstuff.region = XCreateRegion();
  408.           /* rect is set up above */
  409. !         XUnionRectWithRegion(rect, mstuff.region, mstuff.region);
  410.           if (!XQueryTree(dpy, WinRootID(mstuff.frame), &dummy, &dummy,
  411.                  &mstuff.children, &mstuff.num_children))
  412.           mstuff.num_children = 0;
  413. --- 426,432 ----
  414.           if (mstuff.dragwin) {
  415.           mstuff.region = XCreateRegion();
  416.           /* rect is set up above */
  417. !         XUnionRectWithRegion(&rect, mstuff.region, mstuff.region);
  418.           if (!XQueryTree(dpy, WinRootID(mstuff.frame), &dummy, &dummy,
  419.                  &mstuff.children, &mstuff.num_children))
  420.           mstuff.num_children = 0;
  421. ***************
  422. *** 454,463 ****
  423.           winlist = ListCons(c->framewin, winlist);
  424.           /*
  425.            * Can't move sticky windows into the VDM.  Thus, if all windows
  426. !          * is sticky, we don't allow any move into the VDM, since otherwise
  427.            * its too confusing
  428.            */
  429. !         allsticky = allsticky & !c->sticky;
  430.       }
  431.       if (allsticky)
  432.           mstuff.check_vdm = False;
  433. --- 454,463 ----
  434.           winlist = ListCons(c->framewin, winlist);
  435.           /*
  436.            * Can't move sticky windows into the VDM.  Thus, if all windows
  437. !          * are sticky, we don't allow any move into the VDM, since otherwise
  438.            * its too confusing
  439.            */
  440. !         allsticky = allsticky & c->sticky;
  441.       }
  442.       if (allsticky)
  443.           mstuff.check_vdm = False;
  444. ***************
  445. *** 905,913 ****
  446.        */
  447.       dw = DisplayWidth(win->core.client->dpy, win->core.client->screen);
  448.       dh = DisplayHeight(win->core.client->dpy, win->core.client->screen);
  449. !     offX = mstuff->targetScreenX * dw + mstuff->vdm->offsetX;
  450. !     offY = mstuff->targetScreenY * dh + mstuff->vdm->offsetY;
  451. !         GFrameSetConfig(win, (win->core.x % dw) + offX, (win->core.y % dh) + offY,
  452.                   win->core.width, win->core.height);
  453.       }
  454.       if (GRV.VirtualRaiseOnMove)
  455. --- 905,913 ----
  456.        */
  457.       dw = DisplayWidth(win->core.client->dpy, win->core.client->screen);
  458.       dh = DisplayHeight(win->core.client->dpy, win->core.client->screen);
  459. !     offX = mstuff->targetScreenX * dw;
  460. !     offY = mstuff->targetScreenY * dh;
  461. !         GFrameSetConfig(win, win->core.x + offX, win->core.y + offY,
  462.                   win->core.width, win->core.height);
  463.       }
  464.       if (GRV.VirtualRaiseOnMove)
  465. ***************
  466. *** 962,977 ****
  467.           return (void *) 0;
  468.       }
  469.       curScreenX = (win->core.x - mstuff->vdm->offsetX) / dw;
  470. !     if (offX < 0)
  471. !         newScreenX = (win->core.x + offX + mstuff->vdm->offsetX) / dw;
  472. !     else newScreenX = (win->core.x + offX - mstuff->vdm->offsetX) / dw;
  473. !     mstuff->targetScreenX = newScreenX;
  474.       curScreenY = (win->core.y - mstuff->vdm->offsetY) / dh;
  475. !     if (offY < 0)
  476. !         newScreenY = (win->core.y + offY + mstuff->vdm->offsetY) / dh;
  477. !     else newScreenY = (win->core.y + offY - mstuff->vdm->offsetY) / dh;
  478. !     mstuff->targetScreenY = newScreenY;- curScreenY;
  479. !     if (curScreenX - newScreenX == 0 && curScreenY - newScreenY == 0)
  480.           doConfigOneWindow(win, mstuff);
  481.       else GroupApply(leader->groupid, configOneClient, mstuff,
  482.               GROUP_LEADER | GROUP_DEPENDENT);
  483. --- 962,973 ----
  484.           return (void *) 0;
  485.       }
  486.       curScreenX = (win->core.x - mstuff->vdm->offsetX) / dw;
  487. !     newScreenX = (win->core.x + offX - mstuff->vdm->offsetX) / dw;
  488. !     mstuff->targetScreenX = newScreenX - curScreenX;
  489.       curScreenY = (win->core.y - mstuff->vdm->offsetY) / dh;
  490. !     newScreenY = (win->core.y + offY - mstuff->vdm->offsetY) / dh;
  491. !     mstuff->targetScreenY = newScreenY - curScreenY;
  492. !     if (mstuff->targetScreenY == 0 && mstuff->targetScreenX == 0)
  493.           doConfigOneWindow(win, mstuff);
  494.       else GroupApply(leader->groupid, configOneClient, mstuff,
  495.               GROUP_LEADER | GROUP_DEPENDENT);
  496. ***************
  497. *** 1719,1725 ****
  498.       rstuff.statuswindow = NULL;
  499.   
  500.       if (trigger == NULL || trigger->type == KeyPress) {
  501. !     resizeDraw(rstuff);
  502.       rstuff.drawn = True;
  503.       }
  504.   
  505. --- 1715,1721 ----
  506.       rstuff.statuswindow = NULL;
  507.   
  508.       if (trigger == NULL || trigger->type == KeyPress) {
  509. !     resizeDraw(&rstuff);
  510.       rstuff.drawn = True;
  511.       }
  512.   
  513. *** BUILD/olvwm.man    Fri Jan  3 18:50:59 1992
  514. --- src/olvwm.man    Mon Jan 27 19:35:10 1992
  515. ***************
  516. *** 1,4 ****
  517. ! .\" @(#)olvwm.man    1.1 olvwm version 1/3/92
  518.   .TH OLVWM 1 "15 November 1991"
  519.   .SH NAME
  520.   olvwm \- OPEN LOOK virtual window manager for OpenWindows
  521. --- 1,4 ----
  522. ! .\" @(#)olvwm.man    1.2 olvwm version 1/27/92
  523.   .TH OLVWM 1 "15 November 1991"
  524.   .SH NAME
  525.   olvwm \- OPEN LOOK virtual window manager for OpenWindows
  526. ***************
  527. *** 453,458 ****
  528. --- 453,473 ----
  529.   .I
  530.   Default value:    UseVDM
  531.   .P
  532. + .TP
  533. + .BI PointerWorkspace " (Boolean)"
  534. + If set to True, olvwm will not change the pointer when it is over a window
  535. + frame.  This is useful in conjunction with xsetroot -cursor if you want
  536. + the specified cursor to be active over frames.
  537. + .I
  538. + Default value:  False
  539. + .P
  540. + .TP
  541. + .BI SaveWorkspaceCmd " (String)"
  542. + If set, this is the command that will be run when the SAVE_WORKSPACE command
  543. + is selected off the main menu.  Otherwise, the default command is run.
  544. + .I
  545. + Default value: owplaces -silent -multi -script -tw -output $HOME/.openwin-init
  546. + .P
  547.   .\" ========================================================================
  548.   .SH ADDITIONAL MISCELLANEOUS RESOURCES
  549.   .LP
  550. ***************
  551. *** 672,678 ****
  552.   UpRight \fI(R9)\fP
  553.   Move the view NorthEast one screen.
  554.   .TP
  555. ! JumpUpRight \fI(R9+Ctrl)\fP +
  556.   Move the view NorthEast ten screens.
  557.   .TP
  558.   HalfUpRight \fI(R9+Shift)\fP
  559. --- 687,693 ----
  560.   UpRight \fI(R9)\fP
  561.   Move the view NorthEast one screen.
  562.   .TP
  563. ! JumpUpRight \fI(R9+Ctrl)\fP
  564.   Move the view NorthEast ten screens.
  565.   .TP
  566.   HalfUpRight \fI(R9+Shift)\fP
  567. ***************
  568. *** 691,697 ****
  569.   DownRight \fI(R15, PgDn)\fP
  570.   Move the view SouthEast one screen.
  571.   .TP
  572. ! JumpDownRight \fI(R15+Ctrl)\fP +
  573.   Move the view SouthEast ten screens.
  574.   .TP
  575.   HalfDownRight \fI(R15+Shift)\fP
  576. --- 706,712 ----
  577.   DownRight \fI(R15, PgDn)\fP
  578.   Move the view SouthEast one screen.
  579.   .TP
  580. ! JumpDownRight \fI(R15+Ctrl)\fP
  581.   Move the view SouthEast ten screens.
  582.   .TP
  583.   HalfDownRight \fI(R15+Shift)\fP
  584. ***************
  585. *** 831,837 ****
  586.   Addition fixes and enhancements have been provided by Rich Berlin,
  587.   David Chase and David Plotkin at Sun, Ken West at Protocol Systems,
  588.   Russel Kegley at General Dynamics, Chuck Musciano at Harris Systems,
  589. ! Alexander Dupuy at Columbia, David Boyd at Sterling Software and Duane
  590. ! Gibson at Unify.
  591.   In addition, several people from the net are not mentioned here but
  592.   contributed duplicate fixes.
  593. --- 846,852 ----
  594.   Addition fixes and enhancements have been provided by Rich Berlin,
  595.   David Chase and David Plotkin at Sun, Ken West at Protocol Systems,
  596.   Russel Kegley at General Dynamics, Chuck Musciano at Harris Systems,
  597. ! Alexander Dupuy at Columbia, David Boyd at Sterling Software, Duane
  598. ! Gibson at Unify, Eric Fifer at Salomon, Andreas Stolcke, and Paul Eggert.
  599.   In addition, several people from the net are not mentioned here but
  600.   contributed duplicate fixes.
  601. *** BUILD/olvwmrc.y    Fri Jan  3 18:50:59 1992
  602. --- src/olvwmrc.y    Mon Jan 27 19:35:11 1992
  603. ***************
  604. *** 4,10 ****
  605.    */ 
  606.   
  607.   %{
  608. ! #ident  "@(#)olvwmrc.y    1.1 olvwm version 1/3/92"
  609.   
  610.   #include <stdio.h>
  611.   #include <string.h>
  612. --- 4,10 ----
  613.    */ 
  614.   
  615.   %{
  616. ! #ident  "@(#)olvwmrc.y    1.2 olvwm version 1/27/92"
  617.   
  618.   #include <stdio.h>
  619.   #include <string.h>
  620. ***************
  621. *** 392,402 ****
  622. --- 392,406 ----
  623.       return NULL;
  624.   }
  625.   
  626. + static int findClient_rootid;
  627.   static Client    *
  628.   findClient(c, s)
  629.       Client    *c;
  630.       char    *s;
  631.   {
  632. +     if (findClient_rootid && findClient_rootid != c->scrInfo->rootid)
  633. +     return NULL;
  634.       if (c->framewin && c->framewin->fcore.name)
  635.           if (!strncmp(c->framewin->fcore.name, s, strlen(s)))
  636.           return c;
  637. ***************
  638. *** 410,415 ****
  639. --- 414,420 ----
  640.   }
  641.   
  642.   static int applyIsKey = False;
  643. + static void clientWarp();
  644.   
  645.   static int
  646.   applyAction(p, cli)
  647. ***************
  648. *** 420,426 ****
  649.   Client    *c;
  650.   char    *s, *t;
  651.   List    *l;
  652. - int    rootX, rootY, root, child, winX, winY, keys;
  653.   
  654.       switch(p->action) {
  655.       case Warp:
  656. --- 425,430 ----
  657. ***************
  658. *** 431,460 ****
  659.            */
  660.           s = strdup(p->parameter);
  661.           t = LookupToken(s, ",");
  662. !         if (strcmp(t, OLVWM_USE_SELECTION))
  663. !             c = (Client *) ListApply(ActiveClientList, findClient, t);
  664. !         else c = cli;
  665. !         free(s);
  666. !         if (c) {
  667. !         VDMMoveTo(dpy, c, c->framewin->core.x, c->framewin->core.y);
  668. !         /*
  669. !          * If we got here via a key, move the mouse to the window and
  670. !          * give it focus
  671. !          */
  672. !         if (applyIsKey) {
  673. !             if (!XQueryPointer(dpy, PANEWINOFCLIENT(c), 
  674. !                 &root, &child, &rootX, &rootY, &winX, &winY,
  675. !                 &keys))
  676. !             break;
  677. !             XWarpPointer(dpy, None, None, 0, 0, 0, 0, 
  678. !                     c->framewin->core.x - rootX +
  679. !                         c->framewin->core.width / 2,
  680. !                     c->framewin->core.y - rootY +
  681. !                         c->framewin->core.height / 2);
  682.           }
  683. !         if (!GRV.FocusFollowsMouse)
  684. !             ClientSetFocus(c, True, CurrentTime);
  685. !         }
  686.           break;
  687.   
  688.       case Open:
  689. --- 435,459 ----
  690.            */
  691.           s = strdup(p->parameter);
  692.           t = LookupToken(s, ",");
  693. !         if (!strcmp(t, OLVWM_USE_SELECTION)) {
  694. !         if (cli)
  695. !             clientWarp(cli);
  696.           }
  697. !         else {
  698. !             extern List *ScreenInfoList;
  699. !             List *l = ScreenInfoList;
  700. !             ScreenInfo *scr;
  701. !             /* allow one warp per screen */
  702. !             for (scr = ListEnum(&l); scr != NULL; scr = ListEnum(&l)) {
  703. !             findClient_rootid = scr->rootid;
  704. !             c = (Client *) ListApply(ActiveClientList, findClient, t);
  705. !             if (c)
  706. !                 clientWarp(c);
  707. !             }
  708. !             findClient_rootid = 0;
  709. !         }
  710. !         free(s);
  711.           break;
  712.   
  713.       case Open:
  714. ***************
  715. *** 542,547 ****
  716. --- 541,573 ----
  717.       return False;
  718.   }
  719.   
  720. + static void
  721. + clientWarp(c)
  722. +     Client    *c;
  723. + {
  724. + int    rootX, rootY, root, child, winX, winY, keys;
  725. +     VDMMoveTo(dpy, c, c->framewin->core.x, c->framewin->core.y);
  726. +     /*
  727. +      * If we got here via a key, move the mouse to the window and
  728. +      * give it focus
  729. +      */
  730. +     if (applyIsKey) {
  731. +     if (!XQueryPointer(dpy, PANEWINOFCLIENT(c),
  732. +         &root, &child, &rootX, &rootY, &winX, &winY,
  733. +         &keys))
  734. +         return;
  735. +     XWarpPointer(dpy, None, None, 0, 0, 0, 0,
  736. +              c->framewin->core.x - rootX +
  737. +              c->framewin->core.width / 2,
  738. +              c->framewin->core.y - rootY +
  739. +              c->framewin->core.height / 2);
  740. +     }
  741. +     if (!GRV.FocusFollowsMouse)
  742. +     ClientSetFocus(c, True, CurrentTime);
  743. + }
  744.   InitOlvwmRC(ldpy)
  745.       Display    *ldpy;
  746.   
  747. ***************
  748. *** 659,667 ****
  749.       return False;
  750.       if (ev->xkey.type != KeyPress)
  751.       return False;
  752. !     win = (WinGeneric *) WIGetInfo(ev->xkey.window);
  753.       if (!win)
  754. !         win = (WinGeneric *) VGetInfo(ev->xkey.window);
  755.       if (!win)
  756.       ErrorWarning(gettext("Unexpected window keyboard event"));
  757.       else {
  758. --- 685,693 ----
  759.       return False;
  760.       if (ev->xkey.type != KeyPress)
  761.       return False;
  762. !     win = (WinGeneric *) WIGetInfo(ev->xkey.root);
  763.       if (!win)
  764. !         win = (WinGeneric *) VGetInfo(ev->xkey.root);
  765.       if (!win)
  766.       ErrorWarning(gettext("Unexpected window keyboard event"));
  767.       else {
  768. *** BUILD/parse.l    Fri Jan  3 18:50:59 1992
  769. --- src/parse.l    Mon Jan 27 19:35:11 1992
  770. ***************
  771. *** 4,10 ****
  772.    *      See LEGAL_NOTICE file for terms of the license.
  773.    */
  774.   
  775. ! #ident  "@(#)parse.l    1.1 olvwm version 1/3/92"
  776.   %}
  777.   %%
  778.   
  779. --- 4,10 ----
  780.    *      See LEGAL_NOTICE file for terms of the license.
  781.    */
  782.   
  783. ! #ident  "@(#)parse.l    1.2 olvwm version 1/27/92"
  784.   %}
  785.   %%
  786.   
  787. ***************
  788. *** 31,36 ****
  789. --- 31,37 ----
  790.   WINMENU { yylval.ival = WINMENU; return WINMENU; }
  791.   "+"    { yylval.ival = PLUS; return PLUS; }
  792.   
  793. + Help    { yylval.sval = yytext; return KEY; }
  794.   [LRF][0-9]+    { yylval.sval = yytext; return KEY; }
  795.   
  796.   [0-9]+    { yylval.ival = atoi(yytext); return INT; }
  797. *** BUILD/resources.c    Fri Jan  3 18:50:59 1992
  798. --- src/resources.c    Mon Jan 27 19:40:41 1992
  799. ***************
  800. *** 4,10 ****
  801. --- 4,16 ----
  802.    *      file for terms of the license.
  803.    */
  804.   
  805. + #ident "@(#)resources.c    1.2 olvwm version 1/27/92"
  806. + /*
  807. +  *
  808.   #ident "@(#)resources.c    26.45    91/10/04 SMI"
  809. +  *
  810. +  */
  811.   
  812.   #ifdef SYSV
  813.   #include <sys/types.h>
  814. ***************
  815. *** 375,380 ****
  816. --- 381,390 ----
  817.       &(GRV.UseImageMenu),    cvtImageType,        NULL        },
  818.   {   "virtualMoveGroup",        "VirtualMoveGroup",    "True",
  819.       &(GRV.VirtualMoveGroups),    cvtBoolean,        NULL        },
  820. + {   "pointerWorkspace",        "PointerWorkspace",    "False",
  821. +     &(GRV.PointerWorkspace),    cvtBoolean,        NULL        },
  822. + {   "saveWorkspaceCmd",        "SaveWorkspaceCmd",    NULL,
  823. +     &(GRV.SaveWorkspaceCmd),    cvtString,        NULL        },
  824.   };
  825.   
  826.   #define NRESOURCEITEMS (sizeof(ResourceTable)/sizeof(ResourceItem))
  827. *** BUILD/screen.c    Fri Jan  3 18:50:59 1992
  828. --- src/screen.c    Mon Jan 27 19:35:13 1992
  829. ***************
  830. *** 4,10 ****
  831.    *      file for terms of the license.
  832.    */
  833.   
  834. ! #ident    "@(#)screen.c    1.1 olvwm version 1/3/92"
  835.   
  836.   /*
  837.    * Based on
  838. --- 4,10 ----
  839.    *      file for terms of the license.
  840.    */
  841.   
  842. ! #ident    "@(#)screen.c    1.2 olvwm version 1/27/92"
  843.   
  844.   /*
  845.    * Based on
  846. ***************
  847. *** 2178,2184 ****
  848.       /*
  849.         *    Set the cursor for that screen's root window
  850.        */
  851. !     XDefineCursor(dpy,scrInfo->rootid,GRV.BasicPointer);
  852.   
  853.       /*
  854.        * Create VDM for screen
  855. --- 2178,2185 ----
  856.       /*
  857.         *    Set the cursor for that screen's root window
  858.        */
  859. !     if (!GRV.PointerWorkspace)
  860. !         XDefineCursor(dpy,scrInfo->rootid,GRV.BasicPointer);
  861.   
  862.       /*
  863.        * Create VDM for screen
  864. ***************
  865. *** 2601,2609 ****
  866.   MenuInfo    *info;
  867.   WinPinMenu    *win;
  868.   XEvent        ev;
  869.   
  870. !     info = MenuInfoCreate(si->menuCache, si->rootwin,
  871. !               si->menuTable[MENU_ROOT], 1);
  872.       info->menuX = GRV.AutoRootMenuX;
  873.       info->menuY = GRV.AutoRootMenuY;
  874.       win = MakePinMenu(dpy, si->rootwin, info);
  875. --- 2602,2612 ----
  876.   MenuInfo    *info;
  877.   WinPinMenu    *win;
  878.   XEvent        ev;
  879. + extern MenuInfo    *FindMenuInfo();
  880.   
  881. !     info = FindMenuInfo(si->rootwin, si->menuTable[MENU_ROOT]);
  882. !     if (!info)
  883. !     return;
  884.       info->menuX = GRV.AutoRootMenuX;
  885.       info->menuY = GRV.AutoRootMenuY;
  886.       win = MakePinMenu(dpy, si->rootwin, info);
  887. *** BUILD/services.c    Fri Jan  3 18:50:59 1992
  888. --- src/services.c    Mon Jan 27 19:35:14 1992
  889. ***************
  890. *** 4,10 ****
  891.    *      file for terms of the license.
  892.    */
  893.   
  894. ! #ident    "@(#)services.c    1.1 olvwm version 1/3/92"
  895.   
  896.   /*
  897.    * Based on
  898. --- 4,10 ----
  899.    *      file for terms of the license.
  900.    */
  901.   
  902. ! #ident    "@(#)services.c    1.2 olvwm version 1/27/92"
  903.   
  904.   /*
  905.    * Based on
  906. ***************
  907. *** 484,489 ****
  908. --- 484,491 ----
  909.   
  910.       /* having either grab fail isn't fatal; issue warnings only */
  911.   
  912. +     if (GRV.SaveWorkspaceCmd)
  913. +         owplacesCmd = GRV.SaveWorkspaceCmd;
  914.       VirtualSaveDesktops(dpy, 0, 0);
  915.       if (XGrabPointer(dpy, NoFocusWin, False, ButtonPressMask,
  916.                GrabModeAsync, GrabModeAsync, None,
  917. *** BUILD/slave.c    Fri Jan  3 18:51:00 1992
  918. --- src/slave.c    Mon Jan 27 19:35:14 1992
  919. ***************
  920. *** 7,13 ****
  921. --- 7,19 ----
  922.    *    slave.c
  923.    * ---------------------------------------------------------------------*/
  924.   
  925. + #ident "@(#)slave.c    1.2 olvwm version 1/27/92"
  926. + /*
  927. +  * Based on
  928.   #ident    "@(#)slave.c    26.8    91/09/14 SMI"
  929. +  *
  930. +  */
  931.   
  932.   #include <sys/types.h>
  933.   #include <sys/time.h>
  934. ***************
  935. *** 33,38 ****
  936. --- 39,45 ----
  937.    *    Local Forward Declarations
  938.    * ---------------------------------------------------------------------*/
  939.   void    SlaveFailure();
  940. + static    int        input[2],output[2];
  941.   
  942.   /* ----------------------------------------------------------------------
  943.    *    SlaveStart
  944. ***************
  945. *** 41,47 ****
  946.   SlaveStart(argv)
  947.       char        **argv;
  948.   {
  949. -     int        input[2],output[2];
  950.       struct rlimit    rlimit;
  951.       int        fd,maxfd;
  952.   
  953. --- 48,53 ----
  954. ***************
  955. *** 108,113 ****
  956. --- 114,123 ----
  957.           perror("kill");
  958.           */
  959.       }
  960. +     (void)close(input[0]);
  961. +     (void)close(input[1]);
  962. +     (void)close(output[0]);
  963. +     (void)close(output[1]);
  964.   }
  965.   
  966.   /* ----------------------------------------------------------------------
  967. *** BUILD/states.c    Fri Jan  3 18:51:00 1992
  968. --- src/states.c    Mon Jan 27 19:35:14 1992
  969. ***************
  970. *** 7,13 ****
  971.    *    (Normal, Iconic, Withdrawn)
  972.    */
  973.   
  974. ! #ident    "@(#)states.c    1.1 olvwm version 1/3/92"
  975.   
  976.   /*
  977.    * Based on
  978. --- 7,13 ----
  979.    *    (Normal, Iconic, Withdrawn)
  980.    */
  981.   
  982. ! #ident    "@(#)states.c    1.2 olvwm version 1/27/92"
  983.   
  984.   /*
  985.    * Based on
  986. ***************
  987. *** 880,892 ****
  988.           curScreen = leader->framewin->core.x / dw;
  989.           if (leader->framewin->core.x < 0)
  990.               curScreen--;
  991. !         if (paneAttr.x < 0)
  992.               paneAttr.x = dw + (paneAttr.x % dw) + (curScreen * dw);
  993.           else paneAttr.x = (paneAttr.x % dw) + (curScreen * dw);
  994.           curScreen = leader->framewin->core.y / dh;
  995.           if (leader->framewin->core.y < 0)
  996.               curScreen--;
  997. !         if (paneAttr.y < 0)
  998.               paneAttr.y = dh + (paneAttr.y % dh) + (curScreen * dh);
  999.           else paneAttr.y = (paneAttr.y % dh) + (curScreen * dh);
  1000.           }
  1001. --- 880,892 ----
  1002.           curScreen = leader->framewin->core.x / dw;
  1003.           if (leader->framewin->core.x < 0)
  1004.               curScreen--;
  1005. !         if (paneAttr.x + (int) paneAttr.width < 0)
  1006.               paneAttr.x = dw + (paneAttr.x % dw) + (curScreen * dw);
  1007.           else paneAttr.x = (paneAttr.x % dw) + (curScreen * dw);
  1008.           curScreen = leader->framewin->core.y / dh;
  1009.           if (leader->framewin->core.y < 0)
  1010.               curScreen--;
  1011. !         if (paneAttr.y + (int) paneAttr.width < 0)
  1012.               paneAttr.y = dh + (paneAttr.y % dh) + (curScreen * dh);
  1013.           else paneAttr.y = (paneAttr.y % dh) + (curScreen * dh);
  1014.           }
  1015. *** BUILD/usermenu.c    Fri Jan  3 18:51:00 1992
  1016. --- src/usermenu.c    Mon Jan 27 19:35:15 1992
  1017. ***************
  1018. *** 4,10 ****
  1019.    *      file for terms of the license.
  1020.    */
  1021.   
  1022. ! #ident    "@(#)usermenu.c    1.1 olvwm version 1/3/92"
  1023.   
  1024.   /*
  1025.    * Based on
  1026. --- 4,10 ----
  1027.    *      file for terms of the license.
  1028.    */
  1029.   
  1030. ! #ident    "@(#)usermenu.c    1.2 olvwm version 1/27/92"
  1031.   
  1032.   /*
  1033.    * Based on
  1034. ***************
  1035. *** 1435,1441 ****
  1036.       }
  1037.                
  1038.       if (pmenu->idefault == NOBUTTON)
  1039. !     SetMenuDefault(m, 0);
  1040.       else
  1041.       SetMenuDefault(m, pmenu->idefault);
  1042.   
  1043. --- 1435,1441 ----
  1044.       }
  1045.                
  1046.       if (pmenu->idefault == NOBUTTON)
  1047. !     SetMenuDefault(m, -1);
  1048.       else
  1049.       SetMenuDefault(m, pmenu->idefault);
  1050.   
  1051. *** BUILD/virtual.c    Fri Jan  3 18:51:00 1992
  1052. --- src/virtual.c    Mon Jan 27 19:41:46 1992
  1053. ***************
  1054. *** 28,33 ****
  1055. --- 28,35 ----
  1056.   #include "vdm.icon"
  1057.   #include "vdm.mask"
  1058.   
  1059. + #ident "@(#)virtual.c    1.2 olvwm version 1/27/92"
  1060.   /* Class Function Vector; a virtual pane is the VDM window in which all
  1061.    * the little virtual windows appear (and to which said windows are
  1062.    * parented)
  1063. ***************
  1064. *** 72,77 ****
  1065. --- 74,81 ----
  1066.   #define VDMSelectMask (ButtonPressMask | ButtonReleaseMask | \
  1067.                  ButtonMotionMask | ExposureMask )
  1068.   
  1069. + #define CEIL(a,b)    (((a)+(b)-1)/(b))
  1070.   /*
  1071.    * ==========================================================================
  1072.    *
  1073. ***************
  1074. *** 279,289 ****
  1075.           deltas.delta_y = -dh;
  1076.           break;
  1077.       case ACTION_JUMP_UPLEFT:
  1078.           deltas.delta_x = -dw * 20;
  1079.           deltas.delta_y = -dh * 20;
  1080.           break;
  1081.       case ACTION_HALF_UPLEFT:
  1082. -     case ACTION_DATA_START:
  1083.           deltas.delta_x = -dw * .5;
  1084.           deltas.delta_y = -dh * .5;
  1085.           break;
  1086. --- 283,293 ----
  1087.           deltas.delta_y = -dh;
  1088.           break;
  1089.       case ACTION_JUMP_UPLEFT:
  1090. +     case ACTION_DATA_START:
  1091.           deltas.delta_x = -dw * 20;
  1092.           deltas.delta_y = -dh * 20;
  1093.           break;
  1094.       case ACTION_HALF_UPLEFT:
  1095.           deltas.delta_x = -dw * .5;
  1096.           deltas.delta_y = -dh * .5;
  1097.           break;
  1098. ***************
  1099. *** 309,319 ****
  1100.           deltas.delta_y = dh;
  1101.           break;
  1102.       case ACTION_JUMP_DOWNLEFT:
  1103.           deltas.delta_x = -dw * 20;
  1104.           deltas.delta_y = dh * 20;
  1105.           break;
  1106.       case ACTION_HALF_DOWNLEFT:
  1107. -     case ACTION_DATA_END:
  1108.           deltas.delta_x = -dw * .5;
  1109.           deltas.delta_y = dh * .5;
  1110.           break;
  1111. --- 313,323 ----
  1112.           deltas.delta_y = dh;
  1113.           break;
  1114.       case ACTION_JUMP_DOWNLEFT:
  1115. +     case ACTION_DATA_END:
  1116.           deltas.delta_x = -dw * 20;
  1117.           deltas.delta_y = dh * 20;
  1118.           break;
  1119.       case ACTION_HALF_DOWNLEFT:
  1120.           deltas.delta_x = -dw * .5;
  1121.           deltas.delta_y = dh * .5;
  1122.           break;
  1123. ***************
  1124. *** 403,412 ****
  1125.       sscanf(v->resources->size, "%dx%d", &width, &height);
  1126.       if (width < dw)
  1127.           v->columns = width;
  1128. !     else v->columns = ceil((double) width / dw);
  1129.       if (height < dh)
  1130.       v->rows = height;
  1131. !     else v->rows = ceil((double) height / dh);
  1132.   
  1133.       v->absoluteWidth = v->columns * dw;
  1134.       v->absoluteHeight = v->rows * dh;
  1135. --- 407,416 ----
  1136.       sscanf(v->resources->size, "%dx%d", &width, &height);
  1137.       if (width < dw)
  1138.           v->columns = width;
  1139. !     else v->columns = CEIL(width, dw);
  1140.       if (height < dh)
  1141.       v->rows = height;
  1142. !     else v->rows = CEIL(height, dh);
  1143.   
  1144.       v->absoluteWidth = v->columns * dw;
  1145.       v->absoluteHeight = v->rows * dh;
  1146. ***************
  1147. *** 653,666 ****
  1148.           vdm->absoluteHeight = ((vdm->absoluteHeight - 1) / dh + 1) * dh;
  1149.           vdm->absoluteWidth = (vdm->width - 3) * vdm->resources->scale;
  1150.           vdm->absoluteWidth = ((vdm->absoluteWidth - 1) / dw + 1) * dw;
  1151. !         vdm->rows = ceil((double) vdm->absoluteHeight / dh);
  1152. !         vdm->columns = ceil((double) vdm->absoluteWidth / dw);
  1153.       }
  1154.       else {
  1155.           vdm->absoluteHeight = vdm->height * vdm->resources->scale;
  1156.           vdm->absoluteWidth = vdm->width * vdm->resources->scale;
  1157. !         vdm->rows = ceil((double) vdm->absoluteHeight / dh);
  1158. !         vdm->columns = ceil((double) vdm->absoluteWidth / dw);
  1159.       }
  1160.       doit = False;
  1161.       deltas.delta_x = deltas.delta_y = 0;
  1162. --- 657,670 ----
  1163.           vdm->absoluteHeight = ((vdm->absoluteHeight - 1) / dh + 1) * dh;
  1164.           vdm->absoluteWidth = (vdm->width - 3) * vdm->resources->scale;
  1165.           vdm->absoluteWidth = ((vdm->absoluteWidth - 1) / dw + 1) * dw;
  1166. !         vdm->rows = CEIL(vdm->absoluteHeight, dh);
  1167. !         vdm->columns = CEIL(vdm->absoluteWidth, dw);
  1168.       }
  1169.       else {
  1170.           vdm->absoluteHeight = vdm->height * vdm->resources->scale;
  1171.           vdm->absoluteWidth = vdm->width * vdm->resources->scale;
  1172. !         vdm->rows = CEIL(vdm->absoluteHeight, dh);
  1173. !         vdm->columns = CEIL(vdm->absoluteWidth, dw);
  1174.       }
  1175.       doit = False;
  1176.       deltas.delta_x = deltas.delta_y = 0;
  1177. ***************
  1178. *** 1643,1651 ****
  1179.       screen--;
  1180.       dw = DisplayWidth(dpy, client->screen);
  1181.       dh = DisplayHeight(dpy, client->screen);
  1182. !     VDMMoveTo(dpy, client, dw * (screen % client->scrInfo->vdm->rows) +
  1183.                       client->scrInfo->vdm->offsetX,
  1184. !         dh * (screen / client->scrInfo->vdm->rows) +
  1185.                       client->scrInfo->vdm->offsetY);
  1186.   }
  1187.   
  1188. --- 1647,1655 ----
  1189.       screen--;
  1190.       dw = DisplayWidth(dpy, client->screen);
  1191.       dh = DisplayHeight(dpy, client->screen);
  1192. !     VDMMoveTo(dpy, client, dw * (screen % client->scrInfo->vdm->columns) +
  1193.                       client->scrInfo->vdm->offsetX,
  1194. !         dh * (screen / client->scrInfo->vdm->columns) +
  1195.                       client->scrInfo->vdm->offsetY);
  1196.   }
  1197.   
  1198. *** BUILD/winframe.c    Fri Jan  3 18:51:00 1992
  1199. --- src/winframe.c    Mon Jan 27 19:35:16 1992
  1200. ***************
  1201. *** 4,10 ****
  1202.    *      file for terms of the license.
  1203.    */
  1204.   
  1205. ! #ident    "@(#)winframe.c    1.1 olvwm version 1/3/92"
  1206.   
  1207.   /*
  1208.    * Based on
  1209. --- 4,10 ----
  1210.    *      file for terms of the license.
  1211.    */
  1212.   
  1213. ! #ident    "@(#)winframe.c    1.2 olvwm version 1/27/92"
  1214.   
  1215.   /*
  1216.    * Based on
  1217. ***************
  1218. *** 1532,1539 ****
  1219.       attributes.cursor = GRV.TargetPointer;
  1220.       attributes.border_pixel = 0;
  1221.       attributes.colormap = cli->scrInfo->colormap;
  1222. !         valuemask = CWEventMask | CWSaveUnder | CWBackPixmap | CWCursor |
  1223. !         CWBorderPixel | CWColormap;
  1224.   
  1225.           win = XCreateWindow(dpy, cli->scrInfo->rootid,
  1226.                            0, 0, 1, 1,
  1227. --- 1532,1542 ----
  1228.       attributes.cursor = GRV.TargetPointer;
  1229.       attributes.border_pixel = 0;
  1230.       attributes.colormap = cli->scrInfo->colormap;
  1231. !     if (GRV.PointerWorkspace)
  1232. !         valuemask = CWEventMask | CWSaveUnder | CWBackPixmap |
  1233. !             CWBorderPixel | CWColormap;
  1234. !     else valuemask = CWEventMask | CWSaveUnder | CWBackPixmap | CWCursor |
  1235. !                 CWBorderPixel | CWColormap;
  1236.   
  1237.           win = XCreateWindow(dpy, cli->scrInfo->rootid,
  1238.                            0, 0, 1, 1,
  1239. *** BUILD/winipane.c    Fri Jan  3 18:51:01 1992
  1240. --- src/winipane.c    Mon Jan 27 19:35:16 1992
  1241. ***************
  1242. *** 4,10 ****
  1243.    *      file for terms of the license.
  1244.    */
  1245.   
  1246. ! #ident    "@(#)winipane.c    1.1 olvwm version 1/3/92"
  1247.   
  1248.   /*
  1249.    * Based on
  1250. --- 4,10 ----
  1251.    *      file for terms of the license.
  1252.    */
  1253.   
  1254. ! #ident    "@(#)winipane.c    1.2 olvwm version 1/27/92"
  1255.   
  1256.   /*
  1257.    * Based on
  1258. ***************
  1259. *** 372,378 ****
  1260.           &(w->core.width), &(w->core.height),
  1261.           &borderWidth, &depthReturn);
  1262.   
  1263. !         if (status && depthReturn <= 1) {
  1264.           /* build icon pixmap window */
  1265.           xswa.border_pixel = 0;
  1266.           xswa.colormap = cli->scrInfo->colormap;
  1267. --- 372,378 ----
  1268.           &(w->core.width), &(w->core.height),
  1269.           &borderWidth, &depthReturn);
  1270.   
  1271. !         if (status && depthReturn > 0) {
  1272.           /* build icon pixmap window */
  1273.           xswa.border_pixel = 0;
  1274.           xswa.colormap = cli->scrInfo->colormap;
  1275.  
  1276. -- 
  1277. --
  1278. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  1279. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  1280. Sunnyvale, California 94086            at&t: 408/522-9236
  1281.